package com.ruifu.bom.service;

import com.baomidou.mybatisplus.extension.api.R;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.fhzncloud.cloud.common.security.service.CloudUser;
import com.ruifu.bom.dto.MaterielAndVersionsDTO;
import com.ruifu.bom.dto.MaterielImportDTO;
import com.ruifu.bom.dto.SaveAsDTO;
import com.ruifu.bom.vo.MaterielAndVersionsVO;
import com.ruifu.common.po.MaterielVersions;
import java.util.List;

/**
 * 物料业务逻辑层接口
 *
 * @author nyr
 * @create 2019/11/25
 */
public interface MaterielVersionsService extends IService<MaterielVersions> {
    /**
     * 新建物料(含物料版本)
     *
     * @param materielAndVersionsDTO 物料和物料版本传输对象
     * @return
     */
    R saveMaterielAndVersion(MaterielAndVersionsDTO materielAndVersionsDTO);

    /**
     * 修改物料(含物料版本)
     *
     * @param materielAndVersionsDTO 物料和物料版本传输对象
     * @return
     */
    R updateMaterielAndVersion(MaterielAndVersionsDTO materielAndVersionsDTO);

    /**
     * 删除物料(含物料版本)
     *
     * @param mvIds 物料版本id集合
     * @return
     */
    R batchDelete(List<Long> mvIds);

    /**
     * 升级零部件版本
     *
     * @param mvId 物料版本id
     * @return
     */
    R upVersion(Long mvId);

    /**
     * 查询零部件历史版本
     *
     * @param mvMaterielId 物料id
     * @return
     */
    R versionHistory(Long mvMaterielId);

    /**
     * 转交版本所有权
     *
     * @param mvId   版本id
     * @param userId 被转交人
     * @return
     */
    R transferOwnership(Long mvId, Long userId);

    /**
     * 联合查询
     * @return
     * @param page 分页对象
     * @param materielAndVersionsDTO 料和物料版本传输对象
     * @param cloudUser
     */
    Page<MaterielAndVersionsVO> find(Page<MaterielAndVersionsVO> page, MaterielAndVersionsDTO materielAndVersionsDTO, CloudUser cloudUser);

    /**
     * 根据物料版本id查询详情
     * @param mvId 物料id
     * @return
     */
    R findByMvId(String mvId);

    /**
     * 另存为
     * @param saveAsDTO
     * @return
     */
    R saveAs(SaveAsDTO saveAsDTO);

    /**
     * 保存导入文档数据
     *
     * @param materielImportDTOList
     * @param list
     */
    void saveImport(List<MaterielImportDTO> materielImportDTOList, List<Long> list);
}
